package com.wb.util;

import java.io.*;

/**
 * @author 黄衡熙
 * @version 1.0
 */
public class FileUtil1 {


    /**
     * 将一个文件拷贝一份到指定的文件中
     * @param src    源文件
     * @param target 目标文件
     */
    public static void copyFile(File src, File target) {
        try (
                InputStream in = new FileInputStream(src);
                OutputStream out = new FileOutputStream(target);
        ) {
            // 先读取源文件中的内容
            byte[] b = new byte[1024];
            int i = -1;
            while ((i = in.read(b)) != -1) {
                // 将读取到的内容写入到目标文件中
                out.write(b, 0, i);
            }
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 将一个文件拷贝一份到指定的文件中
     * @param src    源文件
     * @param target 目标文件
     */
    public static void copyFile(String src, String target) {
        copyFile(new File(src), new File(target));
    }

    /**
     * 将一个目录中所有的文件拷贝到指定目录中
     * @param src    源目录
     * @param target 目标目录
     */
    public static void copyDirectory(String src, String target) {
        File file1 = new File(src);
        File file2 = new File(target);
        if (!file1.exists() || !file1.isDirectory()) {
            throw new RuntimeException("源目录不存在或不是目录");
        }
        if (!file2.exists()) {
            file2.mkdirs();
        }
        File[] files = file1.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isFile()) {
                    File destFile = new File(file2, file.getName());
                    copyFile(file, destFile);
                }
            }
        }
    }

    /**
     * 将一个目录中的文件与子目录递归拷贝到一个指定的目录中
     * @param src    源目录
     * @param target 目标目录
     */
    public static void recursiveCopy(String src, String target) {
        File file1 = new File(src);
        File file2 = new File(target);
        if (!file2.exists()) {
            file2.mkdirs();
        }
        File[] files = file1.listFiles();
        if (files == null) {
            throw new RuntimeException("源目录不存在: " + src);
        }
        for (File file : files) {
            String targetPath = target + File.separator + file.getName();
            if (file.isDirectory()) {
                recursiveCopy(file.getAbsolutePath(), targetPath);
            } else {
                copyFile(file.getAbsolutePath(), targetPath);
            }
        }
    }

    /**
     * 拆分文件,将一个文件按照指定大小拆分成多个文件,每一个文件名字为:原名字_index,index从1开始,每次自增1
     * 提示:一个输入流,多个输出流,在输出时,每循环一次,输出一个子文件
     * @param path
     * @param length
     */
    public static void splitFile(String path, int length) {

    }

    /**
     * 合并文件,将之前拆分的文件合并为一个文件,将子文件的_index部分删除作为文件名
     * 提示:一个输出流,多个输入流
     * 传入的是第一个文件,会按照传入的文件的格式自动搜索所有同格式的文件,将这些文件进行合并
     * 文件格式:文件名_索引号
     * @param path
     */
    public static void mergeFile(String path) {

    }
}